Android – Handle消息传递机制

前言

Android为了线程安全,并不会允许我们在UI线程外操作UI,很多时候我们做界面刷新都需要通过Handle来通知UI更新。当我们的子线程想修改Activity中的UI组件,我们可以新建一个Handle对象,通过这个对象向主线程发送消息。而我们发送的消息会先到主线程的MessageQueue进行等待,由Looper按先入先出的顺序取出,再根据Message对象的what属性进行分发给对应的Handle进行处理。

Handle怎么用?

  1. post(Runnable)
1
2
3
4
5
6
mHandler.post(new Runnable() {
@Override
public void run() {
mTextViewResult.setText("执行Handle的post方法成功");
}
});
  1. postDelayed(Runnable,long)

这里我们可以写一个类继承至Runnable,重写run方法,在里面处理UI更新,然后在主线程调用。

  1. sendMessage()

子线程sendMessage()传入一个Message对象,可以是int型,也可以为一个object对象,然后在主线程handleMessage(Message msg)里取出信息更新UI。

  1. sendMessageDelayed()

和上面大同小异。

Demo:https://github.com/Omooo/HandleDemo

四个按钮点击事件对应Handle的四种方法,也很简单清晰。

参考:

Android面试常客Handler详解

Android中的Handler, Looper, MessageQueue和Thread

最后

因为是看慕课网的课程来了解的Handle,学的并不深入。关于Looper还有MessageQueue的道理都懂,但是实际上我还没用到,我太菜了,深入之后再更新,留个坑吧。

我们一直都向往,面朝大海,春暖花开。 但是几人能做到,心中有爱,四季不败?